package njust.edu.web;



import njust.edu.entity.Dish;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;



public class Cart {
    private Map<String, CartItem> map = new LinkedHashMap<String, CartItem>();// HashMap<Long,
    // CartItem>();

    //清空购物车
    public void clear() {
        map.clear();
    }

    //在购物车中查找菜品id为id的菜品份数
    public Integer getItemNum(String id) {
        if (map.get(id) == null) {
            return 0;
        }
        return map.get(id).getQuantity();
    }

    //购物车是否为空
    public Boolean isEmpty() {
        return map.isEmpty();
    }

    //购物车中总价
    public float getTotalMoney() {
        float total = 0f;
        for (CartItem c : getItems()) {
            total += c.getMoney();
        }
        return total;
    }

    //份数减一
    public void removeItem(String id) {
        Integer num = getItemNum(id);
        if (num==1)
            map.remove(id);
        else{
            map.get(id).minus();
        }
    }

    //份数加一
    public void addOne(String id){
        map.get(id).add();
    }

    //获取所有菜品项
    public List<CartItem> getItems() {
        List<CartItem> list = new ArrayList<CartItem>(map.values());
        return list;
    }

    public Map<String, CartItem> getMap() {
        return map;
    }

    public void setMap(Map<String, CartItem> map) {
        this.map = map;
    }

    //购物车中总件数
    public int getTotalNumber() {
        int total = 0;
        for (CartItem c : getItems()) {
            total += c.getQuantity();
        }
        return total;
    }

    //判断购物车中是否有菜名为id的菜品
    public boolean hasDish(String id) {
        return map.containsKey(id);
    }

    //将菜品加入购物车 若已存在 份数加一
    public void addDish(Dish dish) {
        CartItem c = map.get(dish.getId());
        if (c == null) {
            c = new CartItem(dish);
            map.put(dish.getId(), c);
        } else {
            c.add();
        }
    }

    //直接设置菜品id为id的菜品份数为quantity
    public void updateItemQuantity(String id, int quantity) {
        CartItem c = map.get(id);
        if (c != null) {
            c.setQuantity(quantity);
        }
    }

}

